package $clientSideEOFPackage; import com.webobjects.eoapplication.EOController; import com.webobjects.eoapplication.EOEditable; import com.webobjects.eocontrol.EOEditingContext; import com.webobjects.eocontrol.EOFetchSpecification; import com.webobjects.eocontrol.EOGenericRecord; import com.webobjects.eocontrol.EOGlobalID; import com.webobjects.eocontrol.EOObjectStore; import com.webobjects.eodistribution.client.EODistributedObjectStore; import com.webobjects.eogeneration.EOControllerFactory; import com.webobjects.eogeneration.EOFormController; import com.webobjects.eogeneration.EOListController; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSDictionary; @SuppressWarnings("unchecked") public class MyGenericRecord extends EOGenericRecord { /** * */ private static final long serialVersionUID = 1L; public static EODistributedObjectStore _distributedObjectStore() { EOObjectStore objectStore = EOEditingContext.defaultParentObjectStore(); if (objectStore == null || !(objectStore instanceof EODistributedObjectStore)) { throw new IllegalStateException("Default parent object store needs to be an EODistributedObjectStore"); } return (EODistributedObjectStore) objectStore; } public static void formWithEntityName(String entityName, EOGlobalID globalID) { EOControllerFactory f = EOControllerFactory.sharedControllerFactory(); EOController controller = f.controllerWithSpecification(new NSDictionary(new Object[] { entityName, EOControllerFactory.FormTask, EOControllerFactory.TopLevelWindowQuestion }, new Object[] { EOControllerFactory.EntitySpecification, EOControllerFactory.TaskSpecification, EOControllerFactory.QuestionSpecification }), true); if (controller != null) { EOFormController formController = (EOFormController) f.controllerWithEntityName(controller, EOControllerFactory.Open.class, entityName); formController.openObjectWithGlobalID(globalID); formController.setEditability(EOEditable.AlwaysEditable); formController.makeVisible(); } } /** * Invokes {@link #invokeStatelessRemoteMethodWithKeyPath(String, String, Class[], Object[])} with "session" as the * key path argument. */ public static Object invokeStatelessOnSession(String methodName, Class[] argumentTypes, Object[] arguments) { return invokeStatelessRemoteMethodWithKeyPath("session", methodName, argumentTypes, arguments); } /** * This method invokes a remote method on an object on the server side that can be specified with a key path (no * enterprise object) relative to the invocation target of the server side EODistributionContext (for example * "session"). The arguments and return values of remote methods invoked through this method cannot be enterprise * objects (but global IDs are okay). You can use this method, for example, to load resources from the server or to * perform checks in background threads (as long as no enterprise objects are involved). * <p> * The keyPath argument has special semantics: <ol type="a"} * <li>If keyPath is a fully qualified key path (for example, "session"), the key path is followed starting from the * invocation target of the EODistributionContext. * <li>If keyPath is an empty string, the method is invoked on the invocation target of the EODistributionContext * directly (typically a subclass of WOJavaClientComponent). * <li>If keyPath is null, the method is invoked on one of the remote method receivers of the server side * EODistributionContext. </ol> * <p> * If an actual key path is specified, the EODistributionContext on the server blocks all invocations sent with this * method unless methodName is prefixed with "clientSideRequest" or unless the EODistributionContext's delegate (on * the server) implements the right delegate methods to explicitly allow the invocation. "clientSideRequest" methods * can be invoked without special delegate methods on the server-side distribution context, on a remote method * receiver registered with the distribution context or on the session of the distribution context's invocation * target. * * @param keyPath * the key path identifying the receiver of the method invocation * @param methodName * the name of the method to be invoked * @param argumentTypes * the types of the arguments of the method to be invoked * @param arguments * the arguments of the method to be invoked * @return the return value of the remote method invocation */ public static Object invokeStatelessRemoteMethodWithKeyPath(String keyPath, String methodName, Class[] argumentTypes, Object[] arguments) { if (_distributedObjectStore() == null) { throw new IllegalStateException("Distributed object store is null, can not perform RMI"); } return _distributedObjectStore().invokeStatelessRemoteMethodWithKeyPath(keyPath, methodName, argumentTypes, arguments); } public static void listWithEntityName(String entityName, EOFetchSpecification fs) { EOControllerFactory f = EOControllerFactory.sharedControllerFactory(); EOController controller = f.controllerWithSpecification(new NSDictionary(new Object[] { entityName, EOControllerFactory.ListTask, EOControllerFactory.TopLevelWindowQuestion }, new Object[] { EOControllerFactory.EntitySpecification, EOControllerFactory.TaskSpecification, EOControllerFactory.QuestionSpecification }), true); if (controller != null) { EOListController listController = (EOListController) f.controllerWithEntityName(controller, EOControllerFactory.List.class, entityName); listController.listObjectsWithFetchSpecification(fs); listController.setEditability(EOEditable.NeverEditable); listController.makeVisible(); } } public static void listWithEntityName(String entityName, NSArray arrayOfEOs) { EOControllerFactory f = EOControllerFactory.sharedControllerFactory(); EOController controller = f.controllerWithSpecification(new NSDictionary(new Object[] { entityName, EOControllerFactory.ListTask, EOControllerFactory.TopLevelWindowQuestion }, new Object[] { EOControllerFactory.EntitySpecification, EOControllerFactory.TaskSpecification, EOControllerFactory.QuestionSpecification }), true); if (controller != null) { EOListController listController = (EOListController) f.controllerWithEntityName(controller, EOControllerFactory.List.class, entityName); listController.listObjectsWithGlobalIDs((NSArray) arrayOfEOs.valueForKey("globalID")); listController.setEditability(EOEditable.NeverEditable); listController.makeVisible(); } } public MyGenericRecord() { super(); } @Override public void awakeFromInsertion(EOEditingContext ec) { super.awakeFromInsertion(ec); } public EOGlobalID globalID() { return editingContext().globalIDForObject(this); } }